#include <head.h>
typedef struct
{
    long mtype;
    char name[200];
} msg_t;
#define MSGSIZE (sizeof(msg_t) - sizeof(long))
int main(int argc, const char *argv[])
{
    key_t key;
    int msqid;
    // 1.获取键值
    if ((key = ftok("/home", 'a')) == -1)
        PRINT_ERR("ftok error");
    printf("key 【%p】\n",key);
    // 2.创建消息队列
    if ((msqid = msgget(key, IPC_CREAT | 0666)) == -1)
        PRINT_ERR("msgget error");
    printf("创建的消息队列  信息体是 %d\n", msqid);
    // 3.向消息队列中发送消息
    int ret;
    msg_t msg;

    // printf("input (type name sex age) > ");
    // ret = scanf("%ld %s", &msg.mtype, msg.name);
    msg.mtype = 2;
    strcpy(msg.name, "我是 cgi发送消息体 请你对消息进行处理\n");
    printf("%s %s %d \n", __FILE__, __func__, __LINE__);

    printf("%s %s %d \n", __FILE__, __func__, __LINE__);
    // 发送信息
    if (msgsnd(msqid, &msg, MSGSIZE, 0))
        PRINT_ERR("msgsnd error");
    printf("%s %d \n", __func__, __LINE__);
    printf("%s %s %d \n", __FILE__, __func__, __LINE__);

    printf("发送的信息是 【%ld %s】\n", msg.mtype, msg.name);
    // 输入是 取消
    printf("拿到回显消息\n");
    printf("%s %s %d \n", __FILE__, __func__, __LINE__);

    // msgrcv(msqid, &msg, MSGSIZE, type, 0);
    msg.mtype = 20;
    // 这里是在堵塞的    等待读取里面的东西 如果读取和实际不符合就会报错
    if (msgrcv(msqid, &msg, MSGSIZE, msg.mtype, 0) == -1)
        PRINT_ERR("msgrcv error");
    printf("回显消息具体内容为 【msg.mtype %d msg.name%s 】【第一个为的信息 %d  %c】  \n", msg.mtype, msg.name, msg.name[0], msg.name[0]);
    printf("%s %s %d \n", __FILE__, __func__, __LINE__);
}